package db;

import beans.B_Archivo;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import beans.B_Evidencia;
import beans.B_RespuestaAuditoria;
import beans.B_TipoArchivo;
import conexion.Conexion;
import java.sql.Types;

/**
 *
 * @author JoseHernan
 */
public class DB_Evidencia {

    public static ArrayList<B_Evidencia> getListEvidenciasByIdRespuestaAuditoria(int idRespuestaAuditoria) {
        ArrayList<B_Evidencia> list = new ArrayList<B_Evidencia>();
        try {
            Connection con = Conexion.getConexion();

            PreparedStatement ps;
            ResultSet rs;

            ps = con.prepareStatement(" select e.id, e.id_archivo, e.id_respuesta_auditoria, a.id_tipo_archivo, a.nombre, a.url, a.descripcion , ta.nombre as tipo_archivo "
                    + "from tbl_evidencia e "
                    + "inner join tbl_archivo a on a.id = e.id_archivo "
                    + "inner join tbl_tipo_archivo ta on ta.id = a.id_tipo_archivo "
                    + "where e.removed = false and a.removed = false and ta.removed = false and e.id_respuesta_auditoria = " + idRespuestaAuditoria);

            rs = ps.executeQuery();
            B_Evidencia obj;
            B_Archivo objArchivo;
            B_RespuestaAuditoria objRespuestaAuditoria;
            B_TipoArchivo objTipoArchivo;
            while (rs.next()) {
                obj = new B_Evidencia();
                objArchivo = new B_Archivo();
                objRespuestaAuditoria = new B_RespuestaAuditoria();
                objTipoArchivo = new B_TipoArchivo();
                //Asign values
                obj.setId(rs.getInt("id"));
                objArchivo.setId(rs.getInt("id_archivo"));
                objArchivo.setNombre(rs.getString("nombre"));
                objArchivo.setDescripcion(rs.getString("descripcion"));
                objArchivo.setUrl(rs.getString("url"));
                objTipoArchivo.setNombre(rs.getString("tipo_archivo"));
                objArchivo.setObjTipoArchivo(objTipoArchivo);
                obj.setObjArchivo(objArchivo);
                objRespuestaAuditoria.setId(rs.getInt("id_respuesta_auditoria"));
                obj.setObjRespuestaAuditoria(objRespuestaAuditoria);
                //Add to List
                list.add(obj);
            }
            rs.close();
            ps.close();
            con.close();
        } catch (Exception ex) {
            System.out.println(ex);
        }
        return list;
    }

    //SP CRUD
    public static String crud(B_Evidencia obj, String action) {
        String result = "";
        CallableStatement cs = null;
        Connection con = Conexion.getConexion();
        try {
            cs = con.prepareCall("{call sp_crud_evidencia(?,?,?,?,?,?,?,?,?)}");

            cs.registerOutParameter("p_message", Types.VARCHAR);
            cs.setString("p_action", action);
            cs.setInt("p_id", obj.getId());
            cs.setString("p_nombre", obj.getObjArchivo().getNombre());
            cs.setString("p_url", obj.getObjArchivo().getUrl());
            cs.setString("p_descripcion", obj.getObjArchivo().getDescripcion());
            cs.setInt("p_id_tipo_archivo", obj.getObjArchivo().getObjTipoArchivo().getId());
            cs.setInt("p_id_respuesta_auditoria", obj.getObjRespuestaAuditoria().getId());
            cs.setString("p_user", obj.getUser());
            cs.executeUpdate();
            result = cs.getString(1);
        } catch (Exception ex) {
            result = ex.getMessage();
        } finally {
            try {
                cs.close();
                con.close();
            } catch (Exception ex) {
                System.out.println(ex);
            }
        }
        return result;
    }
}
